Data communications systems which include more than one communications subsystem typically utilize a serial crossbar switch to functionally interconnect the subsystems. A serial crossbar switch is a hardware device which permits high-speed serialized data communication between attached subsystems. The switch physically attaches to each subsystem by means of an input/output (I/O) port comprising an individual pair of optical fibers or wires. One of the pair of fibers or wires for each subsystem is used for transmitting information to other systems through the switch, and the other is used for receiving information from other systems via the switch.
The internal switching fabric of the serial crossbar switch provides for connections between any two connected subsystems. The subsystems communicate with each other over these connections, which logically establish communications paths between the transmit wire of a source (or calling) subsystem with a receive wire of a destination (or called) subsystem. In this manner, the switching fabric of the serial crossbar switch provides internal connection crosspoints which eliminate connection blocking. Connections between more than one pair of subsystems may exist concurrently. This concurrency gives the serial crossbar switch a significant performance advantage over single threaded interconnects such as serial ring networks, wherein only one connection between subsystems is permitted at a time.
Conventional serial crossbar switch designs operate on the basis of full duplex connectivity. In a full duplex connection, the switch logically connects the transmit wire of the calling subsystem to the receive wire of the called subsystem, while simultaneously logically connecting the transmit wire of the called subsystem to the receive wire of the calling subsystem. In this manner, each subsystem has a simultaneous communication path to and from the other connected subsystem in which to transfer information. One disadvantage of full duplex connectivity, however, is , that communications between the subsystems is unidirectional along the separate transmit and receive paths. Data is transmitted along the transmit wire of the calling subsystem to the receive wire of the called subsystem, with only an occasional link-level data acknowledgment message sent in return along the transmit wire of the called subsystem to the receive wire of the calling subsystem. This under-utilization of the reverse data path in a full duplex connection results in wasting nearly half of the potential throughput capacity of a serial crossbar switch.
The wasted throughput capacity of a full duplex switch design may be recovered if a switch is instead designed to operate on the basis of simplex connectivity. In a simplex connection, a switch logically connects the transmit wire of the calling subsystem to the receive wire of the called subsystem. However, unlike the full duplex connection, a simplex connection does not provide a separate reverse path for returning messages. Messages addressed to the called subsystem may be received by the called subsystem from other subsystems on its receive link, and messages sent by the calling subsystem may be sent to other subsystems on its transmit link. The transmit link of the called subsystem is available to allow the called subsystem to establish connections with other subsystems, while at the same time, the receive link of the calling subsystem is available to allow connections to the calling subsystem from other subsystems.
The information carried by the transmit and receive links of the subsystems attached to the simplex switch includes data and control messages, which include connect and disconnect requests, connect request acknowledgments, and data acknowledgments. For example, prior to sending data, calling subsystems request connections to (and subsequent disconnections from) other called subsystems via the switch by sending serially encoded connect request and disconnect request link-level control messages to the called subsystems. The called subsystem responds to the calling subsystem request by either acknowledging or not acknowledging the request. In addition, data acknowledgment messages (or error messages) are sent by a called subsystem to a calling subsystem after a data transfer sequence has been completed. Connect and disconnect requests, connect request acknowledgments, and data acknowledgments are sent through the switch in units of control information and data transmission which are referred to as frames.
A simplex switch may also be designed to support the temporary storage (or queuing) of connect requests. That is, when a calling subsystem submits a connect request message frame to the switch, and the switch determines that the called subsystem is presently connected to another subsystem, the switch responds by temporarily storing (queuing) the connect request until the called subsystem becomes available. When the called subsystem is able to accept the queued connect request, the switch makes the connection and sends a connect request acknowledge message to the calling subsystem, which is awaiting acknowledgment of its connect request. Additionally, a simplex switch which supports queuing of connect requests may also be provided with the capability for a calling subsystem to optionally dequeue the queued connect requests by issuing a connect request dequeue message to the switch to cancel the pending queued connect request.
Data communications systems which support queuing and subsequent dequeuing of connect requests through a simplex switch, however, are subject to a potential operational impediment (sometimes referred to as the ships-passing-in-the-night phenomenon). This impediment to system operation may occur if the switch processes a queued connect request by establishing a connection between a called subsystem and a calling subsystem immediately prior to the time at which the calling subsystem issues a connect request dequeue message to the switch. In such a case, while the connect request acknowledge message is being transmitted from the switch to the calling subsystem, the connect request dequeue message is being transmitted from the calling subsystem to the switch. If this happens, the link layer protocol controllers on the switch and the calling subsystem will lose synchronization with each other because they will receive unexpected messages. The controller within the calling subsystem will receive a connect request acknowledge message which is unexpected because the calling subsystem controller has sent a connect request dequeue message and it now expects only the connect request dequeue acknowledge message, and the controller within the switch will receive a connect request dequeue message which is unexpected because the switch controller has already established the connection and thus no connect request is currently queued.
One manner of designing a link layer communications protocol, for a data communications system which supports queuing and subsequent dequeuing of connect requests through a simplex switch, is to treat simultaneously occurring unexpected connect request acknowledge messages and unexpected connect request dequeue messages as errors. The controllers on both the switch and the calling subsystem simply discard the inconsistent message frames, and the calling subsystem thereafter issues a disconnect request message to the switch to break the currently established connection.
The unexpected connect request acknowledge messages and unexpected connect request dequeue messages which are treated as errors, however, corrupt the error statistics of a data communications system. It is an object of the present invention, therefore, to provide a mechanism which is implemented in the link layer protocol controller architecture of such a communications system, which maintains the synchronization of the protocol controllers in the system while eliminating corruption in resulting error statistics.